
#ifndef LAGRANGEAN_H_
#define LAGRANGEAN_H_

#include "vertexOrders.h"
#include "bitMapGraph.h"
#include "graphMacros.h"
#include <stdlib.h>
#include "pl.h"
#include <cplex.h>
#include <string.h>
#include <alloca.h>

double mu[MAX_SIZE];//multiplicadores das restrições de representação
double Lx[MAX_SIZE];//soluções dos problemas de cada vertice

/*Defini os problemas e setup o ambiente*/
int define();

/*Cria os problemas de programação linear para o vertice va[v]*/
int makePL(long v);

/*Calcula o upper bound para o problema*/
double calculateUB();

/*Calcula o lower bound para o problema*/
double calculateLB();

/*Atualiza os multiplicadores lagrangeanos com o metodo do subgradiente*/
int updateLambda();

/*Resolve o problema de programação linear do vertice va[v]*/
double solvePL(int v);

/*Modifica a função objetivo do problema associado ao vertice va[v]*/
int addObjFunc(long v);

/*Resolve a relaxação lagrangeana com o metodo do subgradiente*/
double lagrangian(double* sol);


#endif
